/*
 * @Author: FANQIELAN
 * @Date: 2024-11-22 13:47:53
 * @LastEditors: FANQIELAN
 * @LastEditTime: 2024-11-22 19:46:56
 * @FilePath: \embedded-learning\DataStructure\Cpp\include\Cpp_SeqList.h
 * @Description: 
 * 本头文件定义了顺序表的相关结构体和操作函数，支持静态顺序表和动态顺序表的实现。
 * 包括：
 *    1. 静态顺序表：基于固定大小数组实现，容量不可扩展。
 *    2. 动态顺序表：通过动态内存分配实现，可按需扩展容量。
 * Copyright (c) 2024 by FANQIELAN, All Rights Reserved. 
 */

#ifndef __CPP_SEQLIST_H
#define __CPP_SEQLIST_H

// 系统库文件
#include <stdio.h>
#include <stdlib.h>

#define INIT_SIZE   10  // 默认的最大长度
#define MAX_SIZE    10  // 顺序表最大长度

/**
 * @description: 定义顺序表结构体，包括数据数组和长度。
 *               用于存储顺序表的数据和顺序表当前的有效元素数量。
 */
typedef struct
{
    int data[MAX_SIZE];  // 存储顺序表的数据元素，最大容量为 MAX_SIZE  
    int length;         // 当前顺序表中有效数据的数量
} SeqList;

/**
 * @description: 定义顺序表结构体。
 *               定义执行数据的指针，最大元素量，有效表长。
 */
typedef struct{
    int *data;
    int MaxSize;
    int length;
}SeqList_Malloc;

#ifdef __cplusplus
extern "C" {
#endif

// 静态顺序表：无法增删元素。
void InitList(SeqList &L);

// 动态顺序表：通过指针增删元素
void InitList_Malloc(SeqList_Malloc &L);
void IncreaseSize_Malloc(SeqList_Malloc &L, int len);

#ifdef __cplusplus
}
#endif

#endif  /* __CPP_SEQLIST_H */
